코딩테스트 연습 - 삼총사 | 프로그래머스 스쿨

[ 템플릿 코드 ]

#include <string>
#include <vector>
 
using namespace std;
 
int solution(vector<int> number) {
    int answer = 0;
    return answer;
}

[ 풀이 ]

#include <vector>
 
using namespace std;
 
int solution(vector<int> number) 
{
    int answer = 0;
 
    for (int i = 0; i < number.size() - 2; i++)
    {
        for (int j = i + 1; j < number.size() - 1; j++)
        {
            for (int k = j + 1; k < number.size(); k++)
            {
                if (number[i] + number[j] + number[k] == 0)
                {
                    answer++;
                }
            }
        }
    }
 
    return answer;
}

[ 해설 ]

#include <vector>
 
using namespace std;
 
int solution(vector<int> number) 
{
    // 삼총사를 만들 수 있는 경우의 수를 저장할 변수
    int answer = 0;
 
    // 첫 번째 학생을 선택하는 반복문
    // 뒤에서 최소 2명을 더 뽑아야 하므로
    // number.size() - 2 전까지만 순회
    for (int i = 0; i < number.size() - 2; i++)
    {
        // 두 번째 학생을 선택하는 반복문
        // 이미 첫 번째 학생으로 i를 선택했기 때문에
        // 중복 선택을 방지하기 위해 i + 1부터 시작
        for (int j = i + 1; j < number.size() - 1; j++)
        {
            // 세 번째 학생을 선택하는 반복문
            // 마찬가지로 중복 조합을 막기 위해
            // j 다음 위치인 j + 1부터 시작
            for (int k = j + 1; k < number.size(); k++)
            {
                // 선택된 세 학생의 번호를 모두 더함
                int sum = number[i] + number[j] + number[k];
 
                // 세 학생의 번호 합이 0이면
                // 문제에서 말하는 '삼총사' 조건을 만족
                if (sum == 0)
                {
                    // 삼총사 개수 1 증가
                    answer++;
                }
            }
        }
    }
 
    // 최종적으로 찾은 삼총사 개수 반환
    return answer;
}

[ 타 답안 ]

 

C++ CodingTest